﻿using Onshi.POS.Formularios.Properties;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Enumeradores;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Onshi.POS.Articulos.Vistas;
using Onshi.POS.Articulos;
using Onshi.POS.Modelo.Objectos;
using System.IO;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Entidades.Tipos;
using System.Configuration;

namespace Onshi.POS.Formularios
{
    public partial class ArticulosAltaModificacionEstandar : FormularioBase, IArticulosAltaModificacionEstandar
    {
        #region Constructores

        public ArticulosAltaModificacionEstandar()
        {
            InitializeComponent();
            Text = "Nuevo artículo de tipo estándar";
            presentador = new ArticulosAltaModificacionEstandarPresentador(this);
        }

        public ArticulosAltaModificacionEstandar(Int32 idArticulo)
            : this()
        {
            Text = "Modificar artículo de tipo estándar";
            this.idArticulo = idArticulo;
        }

        #endregion

        #region Atributos

        private ArticulosAltaModificacionEstandarPresentador presentador;
        private Int32 idArticulo;
        private List<Ubicacion> listadoUbicaciones;
        private List<ArticuloExistencia> listadoExistencias;

        private Boolean variantesModificado;
        private Boolean existenciasModificado;

        private Int32 varianteId;
        private String varianteNombre;
        private List<String> varianteValores;

        private Int32 proveedorId;
        private Int16 configuracionImagen;
        private List<ArticuloExistencia> listadoSeleccion;
        private Int32 existenciaCantidad;

        #endregion

        #region Propiedades

        [Browsable(false)]
        public Int16 ConfiguracionImagen
        {
            set { configuracionImagen = value; }
        }

        [Browsable(false)]
        public Int32 ExistenciaCantidad
        {
            get { return existenciaCantidad; }
        }

        [Browsable(false)]
        public Int32 ExistenciaIdUbicacion
        {
            get
            {
                var idUbicacion = 0;
                //if (bsExistencias.Current != null)
                //    idUbicacion = (Int32)grdExistencias[colExistenciaIdUbicacion.Name, grdExistencias.SelectedRows[0].Index].Value;
                return idUbicacion;
            }
        }

        [Browsable(false)]
        public List<String> ExistenciaVariantesDetalles
        {
            get
            {
                var listado = new List<String>();
                for (Int32 i = 0; i < grdExistencias.Columns.Count; i++)
                    if (i > 2)
                        listado.Add((String)grdExistencias[i, grdExistencias.SelectedRows[0].Index].Value);
                return listado;
            }
        }

        [Browsable(false)]
        public List<String> ExistenciaVariantes
        {
            get
            {
                var listado = new List<String>();
                for (Int32 i = 0; i < grdExistencias.Columns.Count; i++)
                    if (i > 2)
                        listado.Add(grdExistencias.Columns[i].HeaderText);
                return listado;
            }
        }

        [Browsable(false)]
        public List<Ubicacion> ListadoUbicaciones
        {
            get { return listadoUbicaciones; }
            set { listadoUbicaciones = value; }
        }

        [Browsable(false)]
        public Int32 VarianteId
        {
            get { return varianteId; }
        }

        [Browsable(false)]
        public String VarianteNombre
        {
            get { return varianteNombre; }
        }

        [Browsable(false)]
        public List<String> VarianteValores
        {
            get { return varianteValores; }
        }

        [Browsable(false)]
        public List<ArticuloVariante> ListadoVariantes
        {
            get { return ((SortableList<ArticuloVariante>)bsVariantes.DataSource).ToList(); }
            set { bsVariantes.DataSource = new SortableList<ArticuloVariante>(value); }
        }

        [Browsable(false)]
        public List<ArticuloListaPrecioVenta> ListadoListasPreciosVentas
        {
            get
            {
                var listado = new List<ArticuloListaPrecioVenta>();
                foreach (var control in panListasPreciosVentas.Controls)
                    if (control.GetType() == typeof(Panel))
                        foreach (var controlHijo in ((Panel)control).Controls)
                            if (controlHijo.GetType() == typeof(NumeroDecimal))
                            {
                                if (((NumeroDecimal)controlHijo).Value > 0)
                                    listado.Add(new ArticuloListaPrecioVenta()
                                    {
                                        Entidad = new ListaPrecioVenta()
                                        {
                                            Id = Convert.ToInt32(((Panel)control).Name)
                                        },
                                        Valor = ((NumeroDecimal)controlHijo).Value
                                    });
                                break;
                            }
                return listado;
            }
            set
            {
                var alto = 3;
                foreach (var item in value)
                {
                    var panel = new Panel();
                    panel.Name = Convert.ToString(item.Entidad.Id);
                    panel.Size = new Size(236, 45);
                    panel.Location = new Point(3, alto);
                    panel.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;

                    var etiqueta = new EtiquetaBase();
                    etiqueta.Location = new Point(3, 6);
                    etiqueta.AutoSize = true;
                    etiqueta.Text = item.ListaPrecioNombre;

                    var etiquetaTipo = new EtiquetaBase();
                    etiquetaTipo.Location = new Point(109, 25);
                    etiquetaTipo.AutoSize = true;
                    etiquetaTipo.Text = item.ListaPrecioTipoNombre;

                    var numero = new NumeroDecimal();
                    numero.Size = new Size(100, 20);
                    numero.Location = new Point(3, 22);
                    numero.Value = item.Valor;
                    numero.Numeros = NumeroDecimal.EnumNumeros.Positivos;

                    panel.Controls.Add(etiqueta);
                    panel.Controls.Add(etiquetaTipo);
                    panel.Controls.Add(numero);

                    panListasPreciosVentas.Controls.Add(panel);
                    alto += 51;
                }
            }
        }

        [Browsable(false)]
        public List<ArticuloListaPrecioCompra> ListadoListasPreciosCompras
        {
            get
            {
                var listado = new List<ArticuloListaPrecioCompra>();
                foreach (var control in panListasPreciosCompras.Controls)
                    if (control.GetType() == typeof(Panel))
                        foreach (var controlHijo in ((Panel)control).Controls)
                            if (controlHijo.GetType() == typeof(NumeroDecimal))
                            {
                                if (((NumeroDecimal)controlHijo).Value > 0)
                                    listado.Add(new ArticuloListaPrecioCompra()
                                    {
                                        Entidad = new ListaPrecioCompra()
                                        {
                                            Id = Convert.ToInt32(((Panel)control).Name)
                                        },
                                        Valor = ((NumeroDecimal)controlHijo).Value
                                    });
                                break;
                            }
                return listado;
            }
            set
            {
                var alto = 5;
                foreach (var item in value)
                {
                    var panel = new Panel();

                    panel.Name = Convert.ToString(item.Entidad.Id);
                    panel.Size = new Size(194, 45);
                    panel.Location = new Point(3, alto);
                    panel.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;

                    var etiqueta = new EtiquetaBase();
                    etiqueta.Location = new Point(3, 6);
                    etiqueta.AutoSize = true;
                    etiqueta.Text = item.ListaPrecioNombre;

                    var numero = new NumeroDecimal();
                    numero.Size = new Size(100, 20);
                    numero.Location = new Point(3, 22);
                    numero.Value = item.Valor;
                    numero.Numeros = NumeroDecimal.EnumNumeros.Positivos;

                    panel.Controls.Add(etiqueta);
                    panel.Controls.Add(numero);

                    panListasPreciosCompras.Controls.Add(panel);
                    alto += 51;
                }
            }
        }

        [Browsable(false)]
        public List<ArticuloCampoPersonalizadoArticulo> ListadoCamposPersonalizados
        {
            get
            {
                var listado = new List<ArticuloCampoPersonalizadoArticulo>();
                foreach (var control in panCamposPersonalizados.Controls)
                    if (control.GetType() == typeof(Panel))
                        foreach (var controlHijo in ((Panel)control).Controls)
                            if (controlHijo.GetType() == typeof(TextoBase))
                            {
                                if (!String.IsNullOrWhiteSpace(((TextoBase)controlHijo).Text))
                                    listado.Add(new ArticuloCampoPersonalizadoArticulo()
                                    {
                                        Entidad = new CampoPersonalizadoArticulo()
                                        {
                                            Id = Convert.ToInt32(((Panel)control).Name)
                                        },
                                        Valor = ((TextoBase)controlHijo).Text
                                    });
                                break;
                            }
                return listado;
            }
            set
            {
                var alto = 3;
                foreach (var item in value)
                {
                    var panel = new Panel();
                    panel.Name = Convert.ToString(item.Entidad.Id);
                    panel.Size = new Size(500, 45);
                    panel.Location = new Point(3, alto);
                    panel.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;

                    var etiqueta = new EtiquetaBase();
                    etiqueta.Location = new Point(3, 6);
                    etiqueta.AutoSize = true;
                    etiqueta.Text = item.Entidad.Nombre;

                    var texto = new TextoBase();
                    texto.Size = new Size(494, 20);
                    texto.Location = new Point(3, 22);
                    texto.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                    texto.Text = item.Valor;

                    panel.Controls.Add(etiqueta);
                    panel.Controls.Add(texto);

                    panCamposPersonalizados.Controls.Add(panel);
                    alto += 51;
                }
            }
        }

        [Browsable(false)]
        public Int32 IdUsuarioSistema
        {
            get { return Principal.IdUsuarioSistema; }
        }

        [Browsable(false)]
        public Int32 IdArticulo
        {
            get { return idArticulo; }
        }

        [Browsable(false)]
        public Int32 IdSubRubroArticulo
        {
            get { return ucSubRubroArticulo.IdSubRubroArticuloSeleccionado; }
            set
            {
                ucSubRubroArticulo.IdSubRubroArticuloSeleccionado = value;
                ucSubRubroArticulo.Actualizar();
            }
        }

        [Browsable(false)]
        public String Codigo
        {
            get { return txtCodigo.Text; }
            set { txtCodigo.Text = value; }
        }

        [Browsable(false)]
        public String Nombre
        {
            get { return txtNombre.Text; }
            set { txtNombre.Text = value; }
        }

        [Browsable(false)]
        public Decimal Comision
        {
            get { return numComision.Value; }
            set { numComision.Value = value; }
        }

        [Browsable(false)]
        public Decimal ComisionMaxima
        {
            get { return numComisionMaxima.Value; }
            set { numComisionMaxima.Value = value; }
        }

        [Browsable(false)]
        public String Observaciones
        {
            get { return txtObservaciones.Text; }
            set { txtObservaciones.Text = value; }
        }

        [Browsable(false)]
        public Byte[] Imagen
        {
            get { return ManejoImagen.ImagenAByte(picImagen.Image); }
            set
            {
                picImagen.Image = ManejoImagen.ByteAImagen(value);
                if (value == null)
                {
                    btnImagenAgregar.Enabled = true;
                    btnImagenQuitar.Enabled = false;
                }
                else
                {
                    btnImagenAgregar.Enabled = false;
                    btnImagenQuitar.Enabled = true;
                }
            }
        }

        [Browsable(false)]
        public Int32 IdMarca
        {
            get { return ucMarca.IdMarcaSeleccionado; }
            set
            {
                ucMarca.IdMarcaSeleccionado = value;
                ucMarca.Actualizar();
            }
        }

        [Browsable(false)]
        public Int32 IdDescuentoRecargoCantidad
        {
            get { return ucDescuentoRecargoCantidad.IdDescuentoRecargoCantidadSeleccionado; }
            set
            {
                ucDescuentoRecargoCantidad.IdDescuentoRecargoCantidadSeleccionado = value;
                ucDescuentoRecargoCantidad.Actualizar();
            }
        }

        [Browsable(false)]
        public Byte IdTipoComisionArticulo
        {
            get { return (Byte)cboTipoComisionArticulo.SelectedValue; }
            set { cboTipoComisionArticulo.SelectedValue = value; }
        }

        [Browsable(false)]
        public Int32 IdDescuentoRecargoFechaHora
        {
            get { return ucDescuentoRecargoFechaHora.IdDescuentoRecargoFechaHoraSeleccionado; }
            set
            {
                ucDescuentoRecargoFechaHora.IdDescuentoRecargoFechaHoraSeleccionado = value;
                ucDescuentoRecargoFechaHora.Actualizar();
            }
        }

        [Browsable(false)]
        public Int32 ExistenciaMinima
        {
            get { return Convert.ToInt32(numExistenciaMinima.Value); }
            set { numExistenciaMinima.Value = value; }
        }

        [Browsable(false)]
        public Int32 ExistenciaMaxima
        {
            get { return Convert.ToInt32(numExistenciaMaxima.Value); }
            set { numExistenciaMaxima.Value = value; }
        }

        [Browsable(false)]
        public Decimal Costo
        {
            get { return numCosto.Value; }
            set { numCosto.Value = value; }
        }

        [Browsable(false)]
        public Decimal Iva
        {
            get { return numIva.Value; }
            set { numIva.Value = value; }
        }

        [Browsable(false)]
        public Decimal Impuesto
        {
            get { return numImpuesto.Value; }
            set { numImpuesto.Value = value; }
        }

        [Browsable(false)]
        public Byte IdTipoImpuestoArticulo
        {
            get { return (Byte)cboTipoImpuestoArticulo.SelectedValue; }
            set { cboTipoImpuestoArticulo.SelectedValue = value; }
        }

        [Browsable(false)]
        public Byte IdTipoCostoArticulo
        {
            get { return (Byte)cboTipoCostoArticulo.SelectedValue; }
            set { cboTipoCostoArticulo.SelectedValue = value; }
        }

        [Browsable(false)]
        public Int32 Existencia
        {
            set { txtExistencia.Text = Convert.ToString(value); }
        }

        [Browsable(false)]
        public Boolean VariantesModificado
        {
            get { return variantesModificado; }
            set { variantesModificado = value; }
        }

        [Browsable(false)]
        public Boolean ExistenciasModificado
        {
            get { return existenciasModificado; }
            set { existenciasModificado = value; }
        }

        [Browsable(false)]
        public Int32 ProveedorId
        {
            get { return proveedorId; }
        }

        [Browsable(false)]
        public List<Proveedor> ListadoProveedores
        {
            get { return ((SortableList<Proveedor>)bsProveedores.DataSource).ToList(); }
            set { bsProveedores.DataSource = new SortableList<Proveedor>(value); }
        }

        [Browsable(false)]
        public List<ArticuloExistencia> ListadoSeleccion
        {
            get { return listadoSeleccion; }
            set { listadoSeleccion = value; }
        }

        [Browsable(false)]
        public DataTable TablaSeleccion
        {
            set
            {
                bsExistencias.DataSource = null;
                grdExistencias.Columns.Clear();

                var columnasVariantes = new List<DataGridViewTextBoxColumn>();
                var colExistenciaCantidad = new DataGridViewTextBoxColumn();
                var colExistenciaId = new DataGridViewTextBoxColumn();
                var colExistenciaUbicacion = new DataGridViewTextBoxColumn();

                colExistenciaId.DataPropertyName = "Id";
                colExistenciaId.HeaderText = "Id";
                colExistenciaId.Name = "colExistenciaId";
                colExistenciaId.ReadOnly = true;
                colExistenciaId.Visible = false;

                colExistenciaCantidad.DataPropertyName = "Cantidad";
                colExistenciaCantidad.Frozen = true;
                colExistenciaCantidad.HeaderText = "Cantidad";
                colExistenciaCantidad.Name = "colExistenciaCantidad";
                colExistenciaCantidad.ReadOnly = true;
                colExistenciaCantidad.Width = 60;
                colExistenciaCantidad.DefaultCellStyle = new DataGridViewCellStyle() { Alignment = DataGridViewContentAlignment.MiddleRight };

                colExistenciaUbicacion.DataPropertyName = "Ubicacion";
                colExistenciaUbicacion.HeaderText = "Ubicación";
                colExistenciaUbicacion.Name = "colExistenciaUbicacion";
                colExistenciaUbicacion.ReadOnly = true;

                columnasVariantes.Add(colExistenciaCantidad);
                columnasVariantes.Add(colExistenciaId);
                columnasVariantes.Add(colExistenciaUbicacion);

                if (value.Columns.Count - 3 > 0)
                    for (Int32 i = 0; i < value.Columns.Count - 3; i++)
                    {
                        var columna = new DataGridViewTextBoxColumn();
                        columna.DataPropertyName = String.Format("Variante{0}", i + 1);
                        columna.HeaderText = ((ArticuloVariante)bsVariantes[i]).Nombre;
                        columna.Name = String.Format("colExistenciaVariante{0}", i + 1);
                        columna.ReadOnly = true;
                        columnasVariantes.Add(columna);
                    }

                grdExistencias.Columns.AddRange(columnasVariantes.ToArray());
                bsExistencias.DataSource = value;
            }
        }

        [Browsable(false)]
        public Int32 IdDetalle
        {
            get
            {
                var idDetalle = 0;
                if (grdExistencias.Rows.Count > 0)
                    idDetalle = (Int32)grdExistencias.SelectedRows[0].Cells["colExistenciaId"].Value;
                return idDetalle;
            }
        }

        [Browsable(false)]
        public List<ArticuloExistencia> ListadoExistencias
        {
            get { return listadoExistencias; }
            set { listadoExistencias = value; }
        }

        #endregion

        #region Eventos

        private void ArticulosAltaModificacionEstandar_Load(Object sender, EventArgs e)
        {
            try
            {
                cboTipoComisionArticulo.Actualizar();
                cboTipoCostoArticulo.Actualizar();
                cboTipoImpuestoArticulo.Actualizar();
                presentador.Inicializar();
                if (idArticulo == 0)
                {
                    cboTipoComisionArticulo.SelectedValue = (Byte)EnumTiposComisionesArticulos.SinComision;
                    cboTipoCostoArticulo.SelectedValue = (Byte)EnumTiposCostosArticulos.Fijo;
                    cboTipoImpuestoArticulo.SelectedValue = (Byte)EnumTiposImpuestosArticulos.Porcentaje;
                    ucSubRubroArticulo.IdSubRubroArticuloSeleccionado = (Int32)EnumSubRubrosArticulos.RubroUnico;
                    ucSubRubroArticulo.Actualizar();
                    ucDescuentoRecargoFechaHora.IdDescuentoRecargoFechaHoraSeleccionado = (Int32)EnumDescuentosRecargosFechasHoras.SinDescuentoNiRecargo;
                    ucDescuentoRecargoFechaHora.Actualizar();
                    ucMarca.IdMarcaSeleccionado = (Int32)EnumMarcas.SinMarca;
                    ucMarca.Actualizar();
                    ucDescuentoRecargoCantidad.IdDescuentoRecargoCantidadSeleccionado = (Int32)EnumDescuentosRecargosCantidades.SinDescuentoNiRecargo;
                    ucDescuentoRecargoCantidad.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnImagenAgregar_Click(Object sender, EventArgs e)
        {
            if (diaImagen.ShowDialog() == DialogResult.OK && !String.IsNullOrWhiteSpace(diaImagen.FileName))
            {
                var archivo = new FileInfo(diaImagen.FileName);
                if (archivo.Length / 1024 > configuracionImagen)
                    MessageBox.Show(String.Format("El tamaño de la imagen supera los {0}kb", configuracionImagen), ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                else
                {
                    picImagen.Load(diaImagen.FileName);
                    btnImagenAgregar.Enabled = false;
                    btnImagenQuitar.Enabled = true;
                }
            }
        }

        private void btnImagenQuitar_Click(Object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Está seguro que desea quitar la imagen actual?", ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                picImagen.Image = null;
                btnImagenAgregar.Enabled = true;
                btnImagenQuitar.Enabled = false;
            }
        }

        private void btnAceptar_Click(Object sender, EventArgs e)
        {
            var validado = true;
            errArticulosAltaModificacionEstandar.Clear();
            if (ucSubRubroArticulo.IdSubRubroArticuloSeleccionado == 0)
            {
                validado = false;
                errArticulosAltaModificacionEstandar.SetError(ucSubRubroArticulo, "El sub rubro no puede quedar vacío");
            }
            if (ucMarca.IdMarcaSeleccionado == 0)
            {
                validado = false;
                errArticulosAltaModificacionEstandar.SetError(ucMarca, "La marca no puede quedar vacía");
            }
            if (ucDescuentoRecargoCantidad.IdDescuentoRecargoCantidadSeleccionado == 0)
            {
                validado = false;
                errArticulosAltaModificacionEstandar.SetError(ucDescuentoRecargoCantidad, "El descuento o recargo por cantidad no puede quedar vacío");
            }
            if (ucDescuentoRecargoFechaHora.IdDescuentoRecargoFechaHoraSeleccionado == 0)
            {
                validado = false;
                errArticulosAltaModificacionEstandar.SetError(ucDescuentoRecargoFechaHora, "El descuento o recargo por fecha y hora no puede quedar vacío");
            }
            if (String.IsNullOrWhiteSpace(txtCodigo.Text))
            {
                validado = false;
                errArticulosAltaModificacionEstandar.SetError(txtCodigo, "El código no puede quedar vacío");
            }
            if (String.IsNullOrWhiteSpace(txtNombre.Text))
            {
                validado = false;
                errArticulosAltaModificacionEstandar.SetError(txtNombre, "El nombre no puede quedar vacío");
            }
            if (validado)
            {
                try
                {
                    presentador.Aceptar();
                    DialogResult = System.Windows.Forms.DialogResult.OK;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
                solArticulo.SelectedTab = tabGeneral;
        }

        private void btnCancelar_Click(Object sender, EventArgs e)
        {
            Close();
        }

        private void cboTipoComisionArticulo_SelectionChangeCommitted(Object sender, EventArgs e)
        {
            switch ((EnumTiposComisionesArticulos)(Byte)cboTipoComisionArticulo.SelectedValue)
            {
                case EnumTiposComisionesArticulos.SinComision:
                case EnumTiposComisionesArticulos.ComisionVendedor:
                    numComision.Enabled = false;
                    numComisionMaxima.Enabled = false;
                    numComision.Value = 0;
                    numComisionMaxima.Value = 0;
                    break;
                case EnumTiposComisionesArticulos.PorcentajeVenta:
                case EnumTiposComisionesArticulos.PorcentajeGanancia:
                    numComision.Enabled = true;
                    numComisionMaxima.Enabled = true;
                    break;
                case EnumTiposComisionesArticulos.MontoFijo:
                    numComision.Enabled = true;
                    numComisionMaxima.Enabled = false;
                    numComisionMaxima.Value = 0;
                    break;
            }
        }

        private void btnVarianteAgregar_Click(Object sender, EventArgs e)
        {
            if (MessageBox.Show("Agregando una nueva variante deberá volver a cargar las existencias" + Environment.NewLine + "¿Está seguro que desea continuar?", ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                var articulosVariantes = new ArticulosVariantes();
                if (articulosVariantes.ShowDialog() == DialogResult.OK)
                {
                    varianteId = articulosVariantes.idVariante;
                    varianteNombre = articulosVariantes.txtNombre.Text;
                    varianteValores = new List<String>();
                    for (Int32 i = 0; i < articulosVariantes.lstValores.Items.Count; i++)
                        varianteValores.Add((String)articulosVariantes.lstValores.Items[i]);
                    try
                    {
                        presentador.VarianteAgregar();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void btnVarianteEditar_Click(Object sender, EventArgs e)
        {
            if (MessageBox.Show("Editando la variante deberá volver a cargar las existencias" + Environment.NewLine + "¿Está seguro que desea continuar?", ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                var articulosVariantes = new ArticulosVariantes();
                articulosVariantes.idVariante = ((ArticuloVariante)bsVariantes.Current).Id;
                articulosVariantes.txtNombre.Text = ((ArticuloVariante)bsVariantes.Current).Nombre;
                foreach (var item in ((ArticuloVariante)bsVariantes.Current).Valores)
                    articulosVariantes.lstValores.Items.Add(item.Valor);
                if (articulosVariantes.ShowDialog() == DialogResult.OK)
                {
                    varianteId = articulosVariantes.idVariante;
                    varianteNombre = articulosVariantes.txtNombre.Text;
                    varianteValores = new List<String>();
                    for (Int32 i = 0; i < articulosVariantes.lstValores.Items.Count; i++)
                        varianteValores.Add((String)articulosVariantes.lstValores.Items[i]);
                    try
                    {
                        presentador.VarianteEditar();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void btnVarianteQuitar_Click(Object sender, EventArgs e)
        {
            if (MessageBox.Show("Quitando la variante deberá volver a cargar las existencias" + Environment.NewLine + "¿Está seguro que desea continuar?", ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                varianteId = ((ArticuloVariante)bsVariantes.Current).Id;
                try
                {
                    presentador.VarianteQuitar();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnExistenciaEditar_Click(Object sender, EventArgs e)
        {
            var articulosExistencias = new ArticulosExistenciasCantidad((Int32)grdExistencias.SelectedRows[0].Cells["colExistenciaCantidad"].Value);
            if (articulosExistencias.ShowDialog() == DialogResult.OK)
            {
                existenciaCantidad = articulosExistencias.Existencia;
                presentador.ExistenciaEditar();
            }
        }

        private void grdVariantes_SelectionChanged(Object sender, EventArgs e)
        {
            if (bsVariantes.Current != null)
            {
                btnVarianteEditar.Enabled = true;
                btnVarianteQuitar.Enabled = true;
            }
            else
            {
                btnVarianteEditar.Enabled = false;
                btnVarianteQuitar.Enabled = false;
            }
        }

        private void grdVariantes_CellClick(Object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
                if (bsVariantes.Current != null && e.ColumnIndex == colVarianteDetalle.Index)
                {
                    var articulosVariantesDetalle = new ArticulosVariantesDetalle();
                    articulosVariantesDetalle.txtNombre.Text = ((ArticuloVariante)bsVariantes.Current).Nombre;
                    foreach (var item in ((ArticuloVariante)bsVariantes.Current).Valores)
                        articulosVariantesDetalle.lstValores.Items.Add(item.Valor);
                    articulosVariantesDetalle.ShowDialog();
                }
        }

        private void btnProveedorAgregar_Click(Object sender, EventArgs e)
        {
            var articulosProveedor = new ArticulosProveedores();
            if (articulosProveedor.ShowDialog() == DialogResult.OK)
            {
                proveedorId = articulosProveedor.ucProveedor.IdProveedorSeleccionado;
                try
                {
                    presentador.ProveedorAgregar();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnProveedorQuitar_Click(Object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Está seguro que desea quitar el proveedor?", ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                proveedorId = ((Proveedor)bsProveedores.Current).Id;
                try
                {
                    presentador.ProveedorQuitar();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void grdProveedores_SelectionChanged(Object sender, EventArgs e)
        {
            btnProveedorQuitar.Enabled = bsProveedores.Current != null ? true : false;
        }

        #endregion
    }
}
